from typing import List

class Solution:
    def maximumSwap(self, num: int) -> int:
        """
        贪心+逆序查找，最大交换
        :param num: 输入的数字
        :return: 最大交换后的数字
        """
        # 将输入的数字转换为字符串列表
        digits = list(str(num))
        # 创建一个字典，存储每个数字最后出现的位置
        last = {int(x): i for i, x in enumerate(digits)}
        # 遍历字符串列表
        for i, x in enumerate(digits):
            # 从9开始，逆序遍历每个数字
            for d in range(9, int(x), -1):
                # 如果当前数字在字典中存在，并且位置大于当前索引
                if last.get(d, -1) > i:
                    # 交换当前数字和字典中存储的数字
                    digits[i], digits[last[d]] = digits[last[d]], digits[i]
                    # 将字符串列表转换为整数并返回
                    return int(''.join(digits))
        # 如果没有找到可以交换的数字，则返回原数字
        return num
